import re
import sys

def 提取导入模块(file_path):
    # 更新正则表达式模式，只捕获 from 后面的模块名
    导入模式 = re.compile(r'^(?:from\s+([\w,\s]+)\s+import|import\s+([\w,\s]+))')
    
    导入模块 = set()

    # 获取系统内置模块
    内置模块 = set(sys.builtin_module_names)

    with open(file_path, 'r', encoding='utf-8') as file:
        for 行 in file:
            # 匹配 import 和 from ... import 语句
            匹配 = 导入模式.match(行.strip())
            if 匹配:
                if 匹配.group(1):  # from ... import ... 格式
                    模块 = [模块.strip() for 模块 in 匹配.group(1).split(',')]
                    导入模块.update(模块)
                elif 匹配.group(2):  # import ... 格式
                    模块 = [模块.strip() for 模块 in 匹配.group(2).split(',')]
                    导入模块.update(模块)

    # 移除内置模块
    导入模块 = {模块 for 模块 in 导入模块 if 模块 not in 内置模块}

    return 导入模块

def 写入需求文件(导入模块, output_file):
    # 写入需求到文件
    with open(output_file, 'w', encoding='utf-8') as file:
        内容 = sorted(导入模块)
        file.writelines(f"{模块}\n" for 模块 in 内容)
    return 内容

# 主程序入口
if __name__ == "__main__":
    file_path = input('输入文件地址：').strip(' "\'\n')  # 去掉引号和空白字符
    output_file = 'requirements.txt'

    导入模块 = 提取导入模块(file_path)
    内容 = 写入需求文件(导入模块, output_file)
    
    # 打印写入的内容
    print("需求已写入 requirements.txt")
    print("写入的内容：")
    print("\n".join(内容))